home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / cross / GBDK-2.0.lha / GBDK / lib / set_xy_t.s < prev    next >
Text File  |  1998-10-01  |  2KB  |  102 lines

  1.     .include    "global.s"
  2.  
  3.     .area    _CODE
  4.  
  5.     ;; Set window tile table from BC at XY = DE of size WH = HL
  6.     ;; wh >= (1,1)
  7. .set_xy_wtt::
  8.     PUSH    HL        ; Store WH
  9.     LDH    A,(.LCDC)
  10.     BIT    6,A
  11.     JR    NZ,1$
  12.     LD    HL,#0x9800    ; HL = origin
  13.     JR    .set_xy_tt
  14. 1$:
  15.     LD    HL,#0x9C00    ; HL = origin
  16.     JR    .set_xy_tt
  17.     ;; Set background tile table from (BC) at XY = DE of size WH = HL
  18.     ;; WH >= (1,1)
  19. .set_xy_btt::
  20.     PUSH    HL        ; Store WH
  21.     LDH    A,(.LCDC)
  22.     BIT    3,A
  23.     JR    NZ,1$
  24.     LD    HL,#0x9800    ; HL = origin
  25.     JR    .set_xy_tt
  26. 1$:
  27.     LD    HL,#0x9C00    ; HL = origin
  28. ;    JR    .set_xy_tt
  29.  
  30. .set_xy_tt::
  31.     PUSH    BC        ; Store source
  32.     XOR    A
  33.     OR    E
  34.     JR    Z,2$
  35.  
  36.     LD    BC,#0x20    ; One line is 20 tiles
  37. 1$:
  38.     ADD    HL,BC        ; Y coordinate
  39.     DEC    E
  40.     JR    NZ,1$
  41. 2$:
  42.     LD    B,#0x00        ; X coordinate
  43.     LD    C,D
  44.     ADD    HL,BC
  45.  
  46.     POP    BC        ; BC = source
  47.     POP    DE        ; DE = WH
  48.     PUSH    HL        ; Store origin
  49.     PUSH    DE        ; Store WH
  50. 3$:
  51.     LDH    A,(.STAT)
  52.     AND    #0x02
  53.     JR    NZ,3$
  54.  
  55.     LD    A,(BC)        ; Copy W tiles
  56.     LD    (HL+),A
  57.     INC    BC
  58.     DEC    D
  59.     JR    NZ,3$
  60.     POP    HL        ; HL = WH
  61.     LD    D,H        ; Restore D = W
  62.     POP    HL        ; HL = origin
  63.     DEC    E
  64.     JR    Z,4$
  65.  
  66.     PUSH    BC        ; Next line
  67.     LD    BC,#0x20    ; One line is 20 tiles
  68.     ADD    HL,BC
  69.     POP    BC
  70.  
  71.     PUSH    HL        ; Store current origin
  72.     PUSH    DE        ; Store WH
  73.     JR    3$
  74. 4$:
  75.     RET
  76.  
  77. _set_tiles::
  78.     PUSH    BC
  79.  
  80.     LDA    HL,11(SP)    ; Skip return address and registers
  81.     LD    B,(HL)        ; BC = src
  82.     DEC    HL
  83.     LD    C,(HL)
  84.     DEC    HL
  85.     LD    D,(HL)        ; DE = dst
  86.     DEC    HL
  87.     LD    E,(HL)
  88.     LDA    HL,4(SP)    ; Skip return address and registers
  89.     PUSH    DE        ; Store address on stack for set_xy_tt
  90.     LD    D,(HL)        ; D = x
  91.     INC    HL
  92.     LD    E,(HL)        ; E = y
  93.     INC    HL
  94.     LD    A,(HL+)        ; A = w
  95.     LD    L,(HL)        ; L = h
  96.     LD    H,A        ; H = w
  97.  
  98.     CALL    .set_xy_tt
  99.  
  100.     POP    BC
  101.     RET
  102.